/**
 *  RMTransactionsFacadeProxy.java        22-ott-2009
 *   
 * Copyright (c) 2009 mentalsmash.org
 *  
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 * 
 *  http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * 
 *  The use of the Apache License does not indicate that this project is
 *  affiliated with the Apache Software Foundation.
 */

package org.mentalsmash.tazio.transactions.wrm;

import java.io.Serializable;
import java.util.concurrent.atomic.AtomicInteger;

import org.mentalsmash.tazio.transactions.control.TazioTransaction;
import org.mentalsmash.tazio.transactions.model.StatusResponse;
import org.mentalsmash.tazio.transactions.model.identifiers.OID;
import org.mentalsmash.tazio.transactions.model.identifiers.TID;
import org.mentalsmash.tazio.transactions.rm.RMTransactionsFacade;
import org.mentalsmash.tazio.transactions.user.Share;

/**
 * The <tt>RMTransactionsFacadeProxy</tt> acts as a wrm-side proxy for the
 * ReplicaManager transactions interface.
 * 
 * @author Andrea Reale
 * @see StatusResponse
 * @see RMTransactionsFacade
 * @version 0.0.1
 */
public class RMTransactionsFacadeProxy implements RMTransactionsFacade {

    private final AtomicInteger seqNoCounter = new AtomicInteger(1);
    
    /*
     * (non-Javadoc)
     * 
     * @see
     * org.mentalsmash.tazio.transactions.rm.RMTransactionsFacade#beginTransaction
     * ()
     */
    @Override
    public long beginTransaction() {
	return seqNoCounter.get();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.mentalsmash.tazio.transactions.rm.RMTransactionsFacade#commitTransaction
     * (org.mentalsmash.tazio.transactions.impl.TazioTransaction)
     */
    @Override
    public long commitTransaction(final TazioTransaction transaction) {
	return seqNoCounter.incrementAndGet();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.mentalsmash.tazio.transactions.rm.RMTransactionsFacade#createObject
     * (java.lang.Class)
     */
    @Override
    public <T extends Serializable> T createObject(final Class<T> txInterface) {
	// TODO Auto-generated method stub
	return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.mentalsmash.tazio.transactions.rm.RMTransactionsFacade#getRootObject
     * ()
     */
    @Override
    public Share getShare() {
	// TODO Auto-generated method stub
	return null;

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.mentalsmash.tazio.transactions.rm.RMTransactionsFacade#removeFromRootSet
     * (org.mentalsmash.tazio.transactions.identifiers.OID)
     */
    @Override
    public boolean removeFromRootSet(final OID objectId) {
	// TODO Auto-generated method stub
	return false;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.mentalsmash.tazio.transactions.rm.RMTransactionsFacade#whatAboutThisTx
     * (org.mentalsmash.tazio.transactions.identifiers.TID)
     */
    @Override
    public StatusResponse whatAboutThisTx(final TID tid) {
	// TODO Auto-generated method stub
	return null;
    }

}
